package com.STS.ELearning.Classes
{
	
	import com.STS.ELearning.DAO.AyarGuruplari;
	import com.STS.ELearning.DAO.Ayarlar;
	import com.STS.ELearning.DAO.BaseDao;
	import com.STS.ELearning.DAO.GirisGurubuAdlari;
	import com.STS.ELearning.DAO.GirisLog;
	import com.STS.ELearning.Events.KullaniciEvent;
	import com.STS.ELearning.VO.AyarlarVO;
	import com.STS.ELearning.VO.GirisLogVO;
	
	import flash.data.SQLConnection;
	import flash.data.SQLStatement;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.SQLEvent;
	

	
	public class KullaniciIslemleri extends com.STS.ELearning.Classes.Base
	{
		[Event(name = 'KullaniciEklendi', type = 'com.STS.ELearning.Container.Events.KullaniciEvent')]
		[Event(name = 'KullaniciGirisYapti', type = 'com.STS.ELearning.Container.Events.KullaniciEvent')]
		[Event(name = 'AktifKullaniciYok', type = 'com.STS.ELearning.Container.Events.KullaniciEvent')]
		[Event(name = 'KullaniciDuzenlendi', type = 'com.STS.ELearning.Container.Events.KullaniciEvent')]
		
		import com.STS.ELearning.DAO.Kullanicilar;
		import com.STS.ELearning.VO.KullanicilarVO;
		
		
		public var sonTamamlananDers:String="";
		public var sonUygulananSinav:String="";
		private var k:Kullanicilar=Kullanicilar.getInstance();
		private static var instance:KullaniciIslemleri;
		public  static function getInstance():KullaniciIslemleri {
			if( instance == null )
				instance = new KullaniciIslemleri( new SingletonLock );
			return instance;
		}
		
		public function KullaniciIslemleri(lock:SingletonLock)
		{
			super();
		}
		
		public function get  AktifKullaniciVarmi():Boolean
		{
			var r:Boolean=false;
			
			if(k.count()>0)
			{
				r=true;	
			}else
			{
				var kEE:KullaniciEvent=new KullaniciEvent(null,KullaniciEvent.AKTIF_KULLANICI_YOK);
				this.dispatchEvent(kEE);
			}
			
			return r;
		}
		public function KullaniciEkle(KullaniciAdi:String,Sifre:String,Ad:String,Soyad:String):Boolean
		{
			var kull:KullanicilarVO=new KullanicilarVO();
			kull.id=0;
			kull.ad=Ad;
			kull.soyad=Soyad;
			kull.email=KullaniciAdi;
			kull.sifre=Sifre;
			kull.girisSayisi=0;
			kull.ilkGirisTarihi=new Date();
			kull.sonGirisTarihi=new Date();
			
			
			var r:Boolean=k.insertRow(kull);
			
			
			if(r)
			{
				var kEE:KullaniciEvent=new KullaniciEvent(kull,KullaniciEvent.KULLANICI_EKLENDI);
				this.dispatchEvent(kEE);
				return true;
			}
			return false;
		}
		public function KullaniciDuzenle(ExKullaniciAdi:String,ExSifre:String,KullaniciAdi:String,Sifre:String,Ad:String,Soyad:String,SonGirisTarihi:Date=null):Boolean
		{
			var kull:KullanicilarVO=KullaniciGetir(ExKullaniciAdi,ExSifre);
			if(kull==null || kull.id==0) return false;
			
			kull.ad=Ad;
			kull.soyad=Soyad;
			kull.email=KullaniciAdi;
			kull.sifre=Sifre;
			if(SonGirisTarihi!=null)
			{
				kull.sonGirisTarihi=SonGirisTarihi;
				kull.girisSayisi+=1;
			}
			
			if(k.updateRow(kull))
			{
				dispatchEvent(new KullaniciEvent(kull,KullaniciEvent.KULLANICI_DUZENLENDI));
			}
			return true;
		}
		
		private function KullaniciGetir(KullaniciAdi:String,Sifre:String):KullanicilarVO
		{
			
			var kul:KullanicilarVO=k.getKullaniciByKullaniciAdi(KullaniciAdi);
			
			return kul;
		}
		
		public function GirisYap(KullaniciAdi:String,Sifre:String,Hatirla:Boolean=false):KullanicilarVO
		{
			var kul:KullanicilarVO=KullaniciGetir(KullaniciAdi,Sifre);
			if(kul!=null)
			{
				kul.girisSayisi++;
				kul.sonGirisTarihi=new Date();
				k.updateRow(kul);
				
				var kge:KullaniciEvent=new KullaniciEvent(kul,KullaniciEvent.KULLANICI_GIRIS_YAPTI);
				dispatchEvent(kge);
				if(Hatirla)
				{
					toogleBeniHatirla(kul);	
				}
			}
			
			return  kul;
		}
		public function toogleBeniHatirla(kul:KullanicilarVO):Boolean
		{
			var obj:Object=otomatikGirisKontrol(true);
			obj.enabled=!obj.enabled;
			if(obj.enabled)
			{
					obj.kuladi=kul.email.toString();
					obj.kulsifre=kul.sifre.toString();
			}else
			{
				obj.kuladi="";
				obj.kulsifre="";
			}
			ay.AyarCek(AyarGuruplari.GIRIS,GirisGurubuAdlari.BENI_HATIRLA,obj.enabled?"1":"0");
			ay.AyarCek(AyarGuruplari.GIRIS,GirisGurubuAdlari.KULLANICI_ADI,obj.kuladi);
			ay.AyarCek(AyarGuruplari.GIRIS,GirisGurubuAdlari.SIFRE,obj.kulsifre);			
			return obj.enabled;
		}
		public function otomatikGirisKontrol(girisyapma:Boolean=false):Object
		{
			
			var arrList:Array=ay.getAyarByGrup(AyarGuruplari.GIRIS);
			var obj:Object=new Object();
			
			obj.enabled=false;
			obj.kuladi="";
			obj.kulsifre="";
			for each(var avo:AyarlarVO in arrList)
			{
				switch(avo.ad)
				{
					case GirisGurubuAdlari.BENI_HATIRLA:
					if(avo.deger!=null && avo.deger!="" && Helper.trim(avo.deger.toString())=="1")
					{
						obj.enabled=true;
					}
					break;
					case GirisGurubuAdlari.KULLANICI_ADI:
						obj.kuladi=avo.deger.toString();
						break;
					case GirisGurubuAdlari.SIFRE:
						obj.kulsifre=avo.deger.toString();
						break;
				}
			}
			if(obj.enabled && obj.kuladi!="" &&  girisyapma==false )
			{
				GirisYap(obj.kuladi,obj.kulsifre);
			}
			return obj;
		}
		
		
		public function cikisLog(ki:KullanicilarVO):void
		{
				var gl:GirisLog=GirisLog.getInstance();
				var glv:GirisLogVO=new GirisLogVO();
				glv.girisTarihi=ki.sonGirisTarihi;
				glv.cikisTarihi=new Date();
				glv.idKullanici=ki.id;
				glv.sonTamamlananDers=this.sonTamamlananDers;
				glv.sonUygulananSinav=this.sonUygulananSinav;
				gl.insertRow(glv);
		}
		public function sonGirisLoglari(ki:KullanicilarVO):GirisLogVO
		{
			var gl:GirisLog=GirisLog.getInstance();
			var glv:GirisLogVO=new GirisLogVO(gl.getSingleRow("cikisTarihi=(select max(cikisTarihi) from main.GirisLog)",null));
			return glv;
		}
	}
}
class SingletonLock {}